Skip to content

ci: orchestrated one-click release to pub.dev#101

Merged
nank1ro merged 1 commit into
mainfrom
ci/orchestrated-release
Jul 1, 2026
Merged

ci: orchestrated one-click release to pub.dev#101
nank1ro merged 1 commit into
mainfrom
ci/orchestrated-release

Conversation

@nank1ro

@nank1ro nank1ro commented Jul 1, 2026

Copy link
Copy Markdown
Owner

What

Adds a manual (workflow_dispatch) release that publishes every package whose pubspec version is not yet on pub.dev, in dependency order, skipping already-published versions. Ported from the solidart release.yaml + scripts/release.sh setup.

Files

  • .github/workflows/release.yaml — manual trigger with a dry_run boolean input. Checks out full history/tags and runs the orchestrator with secrets.RELEASE_PAT.
  • scripts/release.sh — for each publishable package (solid_annotationssolid_generator, dependency order):
    1. reads version: from the pubspec (source of truth — does not bump versions),
    2. skips if that version is already on pub.dev,
    3. errors (continues in dry-run) if the tag exists but the version isn't published — signals a prior publish failed,
    4. otherwise creates a GitHub Release + tag <name>-v<version> (marked --prerelease for pre-release versions, with CHANGELOG notes), which triggers the existing publish.yml,
    5. polls up to 30 min for pub.dev to serve the new version before releasing dependents.

Prerequisite

Requires a RELEASE_PAT repo secret (fine-grained PAT with Contents: write, or a GitHub App token). publish.yml triggers on push: tags, and tags created by the default GITHUB_TOKEN do not trigger other workflows — so a separate identity is required.

How to run

Run the workflow with dry_run: true first to preview the plan (current tags would be solid_annotations-v3.0.0-dev.1 and solid_generator-v3.0.0-dev.1, both prereleases), then re-run with dry_run: false to release.

Validation

  • bash -n scripts/release.sh — no syntax errors
  • Verified CHANGELOG note extraction for 3.0.0-dev.1
  • Verified computed tag names from pubspec versions

Add a manual workflow_dispatch release that publishes every package whose
pubspec version is not yet on pub.dev, in dependency order (solid_annotations
then solid_generator), skipping already-published versions.

scripts/release.sh reads each pubspec version (source of truth; no version
bumping), skips versions already on pub.dev, creates a GitHub Release + tag
(<name>-v<version>) to trigger publish.yml, and waits for pub.dev to serve
the new version before releasing dependents. Supports a dry_run input.

Requires a RELEASE_PAT secret: tags pushed by the default GITHUB_TOKEN do not
trigger publish.yml, so a separate identity is needed.
@nank1ro nank1ro merged commit faac873 into main Jul 1, 2026
1 check passed
@nank1ro nank1ro deleted the ci/orchestrated-release branch July 1, 2026 14:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant